package es.deusto.ingenieria.aike.csp.algorithm;

import es.deusto.ingenieria.aike.csp.formulation.CSPproblem;

/**
 * Interface declaring the basic method of a CSP solving algorithm
 * @param <Type> refers to the type of values that the CSP variables will be assigned.
 * Such a type will be specified at runtime when instantiating
 */
public interface CSPAlgorithm<Type> {
	
	/**
	 * This method solves a CSP
	 * @param problem
	 * <ul>
	 *   <li><b>true</b> - If a solution to the CSP is found</li>
	 *   <li><b>true</b> - If a solution to the CSP is not found</li>
	 * </ul>  
	 */
	public boolean solve(CSPproblem<Type> problem);
}